package Controladores;

import DaoExtendido.CompetenciaExtension;
import Dao.exceptions.IllegalOrphanException;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logico.Competencia;
import Logico.Disciplina;
import Logico.EspacioDeportivo;
import Logico.Evento;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ControladorCompetencia {

    CompetenciaExtension daoCompetencia;
    ConnectionFactory conection;

    public ControladorCompetencia() {

        conection = new ConnectionFactory();
        daoCompetencia = new CompetenciaExtension(conection.getFactory());
    }

    public boolean guardar(String nombre, String descripcion, Date fecha, String hora, String imagenPodio, EspacioDeportivo espacioDeportivo, Disciplina idDisciplina, Evento idEvento, String tipoPuntaje, int cantidadVip, int cantidadPlatino, int cantidadGeneral, int cantidadEliminatoria) {

        boolean guardado = false;

        Competencia competencia = new Competencia();
        competencia.setNombre(nombre);
        competencia.setDescripcion(descripcion);
        competencia.setFecha(fecha);
        competencia.setHora(hora);
        competencia.setImagenpodio(imagenPodio);
        competencia.setIdespacioDeportivo(espacioDeportivo);
        competencia.setDisciplinaIddisciplina(idDisciplina);
        competencia.setEventoIdevento(idEvento);
        competencia.setTipoPuntaje(tipoPuntaje);
        competencia.setCantidadVip(cantidadVip);
        competencia.setCantidadPlatino(cantidadPlatino);
        competencia.setCantidadGeneral(cantidadGeneral);
        competencia.setCantidadAEliminatoria(cantidadEliminatoria);


        try {
            daoCompetencia.create(competencia);
            guardado = true;

        } catch (PreexistingEntityException ex) {
        } catch (Exception ex) {
            Logger.getLogger(ControladorCompetencia.class.getName()).log(Level.SEVERE, null, ex);
        }
        return guardado;
    }

    public boolean borrar(int idCompetencia) {

        boolean borrado = false;

        try {

            daoCompetencia.destroy(idCompetencia);
            borrado = true;


        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorUsuario.class
                    .getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorUsuario.class
                    .getName()).log(Level.SEVERE, null, ex);
        }

        return borrado;
    }

    public boolean modificar(int idCompetencia, String nombre, String descripcion, Date fecha, String hora, String imagenPodio, String tipoPuntaje,
            int cantidadVip, int cantidadPlatino, int cantidadGeneral, int cantidadEliminatoria) {

        boolean modificado = false;

        Competencia competenciaEncontrada = this.buscar(idCompetencia);

        if (competenciaEncontrada != null) {

            competenciaEncontrada.setNombre(nombre);
            competenciaEncontrada.setDescripcion(descripcion);
            competenciaEncontrada.setFecha(fecha);
            competenciaEncontrada.setHora(hora);
            competenciaEncontrada.setImagenpodio(imagenPodio);
            competenciaEncontrada.setTipoPuntaje(tipoPuntaje);
            competenciaEncontrada.setCantidadVip(cantidadVip);
            competenciaEncontrada.setCantidadPlatino(cantidadPlatino);
            competenciaEncontrada.setCantidadGeneral(cantidadGeneral);
            competenciaEncontrada.setCantidadAEliminatoria(cantidadEliminatoria);

            try {

                daoCompetencia.edit(competenciaEncontrada);
                modificado = true;


            } catch (IllegalOrphanException ex) {
                Logger.getLogger(ControladorUsuario.class
                        .getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorUsuario.class
                        .getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorUsuario.class
                        .getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            JOptionPane.showMessageDialog(null, "La competencia no se encuentra en nuestro sistema.");
        }

        return modificado;
    }

    public Competencia buscar(int idCompetencia) {

        return daoCompetencia.findCompetencia(idCompetencia);
    }
    
    public ArrayList<Competencia> buscarPorNombre(String nombre) {

        return daoCompetencia.buscarPorNombre(nombre);
    }
    
    public ArrayList<Competencia> buscarPorEvento(int idEvento) {
        System.out.println("Va a buscar las competencias del evento "+idEvento);
        return daoCompetencia.buscarPorEvento(idEvento);
    }
    
    

    public List<Competencia> listarCompetencias() {

        return daoCompetencia.findCompetenciaEntities();
    }
}
